//
// Created by yanhai on 2020/4/1.
//

/**
 * 可以使用 operator type() const;  提供将当前类转换为其他类的方式
 * 注意此类函数不能有返回值和参数
 */

#include <iostream>
#include <typeinfo>

using namespace std;

class Test {

public:
    Test(int i)
    {
        this->i = i;
    }

    // Test类可以转换为int类
    operator int() const
    {
        return i;
    }

    // Test类可以转换为string类
    operator string() const
    {
        return "Test to string";
    }

private:
    int i;
};

ostream &operator<<(ostream &os, const Test &test)
{
    return os << "Test operator <<";
}

int main()
{
    Test t(10);

    int a = t;  // 隐式转换
    int b = int(t); // 显式转换
    int c = Test(10);
    cout << a << "," << b << "," << c << endl;

    string str1 = t;  // 隐式转换
    cout << str1 << endl;

    auto test = t;   // 自动转换成什么类型？   当然是自身类型，Test类型了。。。。。
    cout << test << endl;
    cout << typeid(test).name() << endl;

    return 0;
}
